<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数</title>
</head>

<body>
    <p>
        封装是面向对象思想中比较重要的一部分，js面向对象可以通过构造函数实现的封装。<br>

        同样的将变量和函数组合到了一起并能通过 this 实现数据的共享，所不同的是借助构造函数创建出来的实例对象之间是彼此不影响的<br>

        总结：<br>

        1. 构造函数体现了面向对象的封装特性<br>
        2. 构造函数实例创建的对象彼此独立、互不影响<br>

        封装是面向对象思想中比较重要的一部分，js面向对象可以通过构造函数实现的封装。<br>

        前面我们学过的构造函数方法很好用，但是 存在浪费内存的问题

    </p>


    <script>
        function Person() {
            this.name = '无名氏'
            this.setName = function (name) {
                this.name = name
            }
            this.getName = () => {
                console.log(this.name);
            }
        }
        // 实例对象，获得了构造函数中封装的所有逻辑
        let p1 = new Person()
        console.log(p1);
        p1.setName('小明')
        console.log(p1.name);

        let p2 = new Person()
        console.log(p2.name);
        p2.name = '0999'
        console.log(p2.name);

        console.log(p2.getName);



    </script>
</body>

</html>